package com.twb.auth.mapper;

import com.twb.auth.entity.twbApi.TwbApi;
import com.twb.auth.entity.twbUser.TwbUser;
import com.twb.auth.entity.twbUser.TwbUserOrganization;
import com.twb.auth.entity.twbUser.TwbUserRole;
import com.twb.auth.entity.twbUser.dto.SearchTwbUserDto;
import com.twb.auth.entity.twbUser.dto.TwbUserPostDto;
import com.twb.auth.entity.twbUser.dto.TwbUserRoleDto;
import com.twb.auth.entity.twbUser.vo.TwbUserPostVo;
import com.twb.auth.entity.twbUser.vo.SearchTwbUserVo;
import com.twb.auth.tenant.Tenant;
import com.twb.core.base.mapper.TwbBaseMapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface TwbUserMapper extends TwbBaseMapper<TwbUser> {

	/**
	 * @Title  getUserByLoginName
	 * @Description 根据登录名获取用户信息
	 * @param loginName
	 * @return
	 * @author DSY
	 * @date 2018年11月2日 下午3:07:10
	 */
	@Tenant(ignore = true)
	public TwbUser getUserByLoginName(String loginName);

	/**
	 * @Title  searchTwbUser
	 * @Description 分页查询用户信息
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月22日 下午6:13:59
	 */
	public List<SearchTwbUserDto> searchTwbUser(SearchTwbUserVo vo);

	/**
	 * @Title  saveUserOrg
	 * @Class: TwbUserMapper.java
	 * @Description 保存用户机构信息
	 * @param userOrg
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午2:29:13
	 */
	public int saveUserOrg(TwbUserOrganization userOrg);

	/**
	 * @Title  deleteUserOrgByUserId
	 * @Class: TwbUserMapper.java
	 * @Description 删除用户机构
	 * @param userId
	 * @author DSY
	 * @date 2018年11月25日 下午9:07:29
	 */
	public void deleteUserOrgByUserId(String userId);

	/**
	 * @Title  saveUserRole
	 * @Class: TwbUserMapper.java
	 * @Description 保存用户角色信息
	 * @param userRole
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午9:27:03
	 */
	public int saveUserRole(TwbUserRole userRole);

	/**
	 * @Title  deleteUserRoleByUserId
	 * @Class: TwbUserMapper.java
	 * @Description 删除用户角色信息
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午9:27:32
	 */
	public int deleteUserRoleByUserId(String userId);
	
	/**
	 * @Title deleteUserPostByUserId
	 * @Description 删除用户岗位信息
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年10月7日 下午9:32:46
	 */
	public int deleteUserPostByUserId(String id);
	
	/**
	 * @Title searchRoleSelectUsers
	 * @Description 分页查询角色待选择用户
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2020年7月15日 下午4:35:21
	 */
	public List<SearchTwbUserDto> searchRoleSelectUsers(SearchTwbUserVo vo);

	/**
	 * @Title searchRoleUsers
	 * @Description 分页查询角色用户
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2020年7月15日 下午4:12:50
	 */
	public List<SearchTwbUserDto> searchRoleUsers(SearchTwbUserVo vo);
	
	/**
	 * @Title searchUserOrgByUserId
	 * @Description 根据用户ID查询机构
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2020年7月16日 下午1:13:00
	 */
	public List<String> searchUserOrgByUserId(@Param("userId") String userId);

	/**
	 * @Title logicDeleteTwbUserById
	 * @Description 逻辑删除用户信息
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2021年3月10日 下午4:54:56
	 */
	public int logicDeleteTwbUserById(String id);

	/**
	 * @Title grantOrganization
	 * @Description 用户组织机构修改
	 * @param orgId
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2021年4月10日 下午8:25:32
	 */
	public int grantOrganization(String orgId, String userId);

	/**
	 * 查询用户所有api权限
	 *
	 * @param userId 用户id
	 * @param resIds 所有一级菜单
	 * @return {@link List }<{@link TwbApi }>
	 * @author DHL
	 * @date 2023-01-09 11:25:53
	 */
	public List<TwbApi> listApisByUserId(@Param("userId") String userId, @Param("resIds") List<String> resIds);

	/**
	 * @Title searchUserRoleByUserId
	 * @Description 根据用户ID查询角色集合
	 * @param id
	 * @return
	 * @AuthorOriginally DHL
	 * @date 2022年4月6日 下午2:27:04
	 */
	public List<TwbUserRoleDto> searchUserRoleByUserId(@Param("userId") String userId);

	/**
	 * @Title getMaxDataScopeTypeById
	 * @Description 获取用户最大数据权限类型
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年7月25日 下午10:29:47
	 */
	public String getMaxDataScopeTypeById(String id);

	/**
	 * @Title listDataScopesById
	 * @Description 获取用户数据权限
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年7月25日 下午10:38:22
	 */
	public List<String> listDataScopesById(String id);

	/**
	 * 保存用户岗位
	 * @param post
	 * @return
	 */
	public int saveUserPost(TwbUserPostVo post);

	/**
	 * 查询用户岗位集合
	 * @param userId
	 * @return
	 */
	public List<TwbUserPostDto> searchUserPostByUserId(@Param("userId") String userId);

	/**
	 * 查询登录用户,忽略租户拦截
	 *
	 * @param id id
	 * @return {@link TwbUser}
	 */
	@Tenant(ignore = true)
	public TwbUser selectLoginUserById(String id);

	/**
	 * 根据openid查询用户
	 * @param openid
	 * @return
	 */
	@Tenant(ignore = true)
	TwbUser searchUserByOpenId(String openid);

	/**
	 * 企业微信用户ID登录
	 *
	 * @param cpUserId cp用户id
	 * @return {@link TwbUser }
	 * @author DHL
	 * @date 2022-12-26 03:36:38
	 */
	@Tenant(ignore = true)
	TwbUser searchUserByCpUserId(String cpUserId);

	/**
	 * @Title listByPostIdAndOrgId
	 * @Description 根据岗位ID和部门ID查询对应人员信息
	 * @param postId
	 * @param orgId
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年11月12日 下午8:08:13
	 */
	@Tenant(ignore = true)
	List<TwbUser> listByPostIdAndOrgId(@Param("postId") String postId,@Param("orgId")  String orgId);
	/**
	 * @Title getDirectSupervisorById
	 * @Description 获取用户直属主管
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年11月12日 下午9:22:15
	 */
	@Tenant(ignore = true)
	TwbUser getDirectSupervisorById(String id);


}
